package com.turing.post.cardmanagement.util;

import java.math.BigInteger;
import java.util.List;

import javax.ejb.Local;
import javax.ejb.Remote;

import com.turing.post.util.PCPSApplicationException;
import com.turing.post.util.PCPSWebInput;

/**
 * 
 * @author YangShuo 制卡控制表
 */
@Remote
@Local
public interface MakeCardControlDao {
	/**
	 * 插入记录
	 * 
	 * @param MakeCardControl
	 *            对象
	 * @throws PCPSApplicationException
	 */
	public void insertMakeCardControl(MakeCardControl mcc)
			throws PCPSApplicationException;

	/**
	 * 修改记录
	 * 
	 * @param MakeCardControl
	 *            对象
	 * @throws PCPSApplicationException
	 */
	public void updateMakeCardControl(MakeCardControl mcc)
			throws PCPSApplicationException;

	/**
	 * 根据主键检 待索对象
	 * 
	 * @param BatchNo
	 *            批次号
	 * @return MakeCardControl 对象
	 * @throws PCPSApplicationException
	 */
	public MakeCardControl getMakeCardControlByBatchNo(String batchNo);

	/**
	 * 根据发卡商机构编号检索对象
	 * 
	 * @param IssueBranchNo
	 *            机构编号
	 * @return MakeCardControl 对象集合
	 */
	public List<MakeCardControl> getMakeCardControlByIssueBranchNo(
			String issueBranchNo);

	// /**
	// * 未入库制卡控制列表查询
	// *
	// * @param
	// * @return MakeCardControl 对象集合
	// */
	// public List<MakeCardControl> getMakeCardControlListByCondition(
	// PCPSWebInput webInput, String startDate, String endDate,
	// Integer page);
	//
	// /**
	// * 未入库制卡控制总数查询
	// *
	// * @param
	// * @return MakeCardControl 对象集合
	// */
	// public BigInteger getMakeCardControlTotalByCondition(PCPSWebInput
	// webInput,
	// String startDate, String endDate);

	/**
	 * 根据制卡人编号检索对象
	 * 
	 * @param OperNo
	 *            操作员编号
	 * @return MakeCardControl 对象集合
	 */
	public List<MakeCardControl> getMakeCardControlByOperNo(BigInteger OperNo);

	/**
	 * 根据发卡商机构编号 状态 检索 待索审批表对象
	 * 
	 * @param IssueBranchNo
	 *            机构编号
	 * @param Status
	 *            状态
	 * @return MakeCardControl 对象集合
	 */
	public List<MakeCardControl> getMakeCardControlByIssueBranchNoAndStatus(
			String issueBranchNo, String Status);

	/**
	 * 根据制卡人编号 状态 检索待索审批表对象
	 * 
	 * @param OperNo
	 *            操作员编号
	 * @param Status
	 *            状态
	 * @return MakeCardControl 对象集合
	 */
	public List<MakeCardControl> getMakeCardControlByOperNoAndStatus(
			BigInteger operNo, String status);

	/**
	 * 记录锁定,准备更新
	 * 
	 * @param Batchno
	 *            批次号
	 * @return MakeCardControl 对象
	 */
	public MakeCardControl getMakeCardControlByBatchnoForUpdate(String Batchno);

	/**
	 * 修改已入库张数，根据传入的count累加，取消传负数
	 * 
	 * @param count
	 *            张数
	 * @param Batchno
	 *            批次号
	 * @return 张数
	 */

	public Integer updateMakeCardControl_AlreadyInStockCount(Integer count,
			String Batchno) throws PCPSApplicationException;

	public void updateMakeCardControlForDownLoad(String batchno)
			throws PCPSApplicationException;

	/**
	 * 根据批次号 查询单条记录,带出制卡文件信息
	 * 
	 * @param BatchNo
	 * @return MakeCardControl对象
	 */

	public MakeCardControl getMakeCardControlByBatchNoForDownLoad(String BatchNo);

	/**
	 * 查询制卡控制列表
	 * 
	 * @param icNo
	 *            发卡商号
	 * @param batchNo
	 *            批次号
	 * @param status ""
	 *            查询全部 2未入库/5 部分入库
	 * @return
	 */
	public List<MakeCardControl> getMakeCardControlList(String icNo,
			String batchNo, String status);

	/**
	 * 未入库卡查询
	 * 
	 * @param webInput
	 * @param batchNo
	 *            制卡批次号
	 * @return
	 */
	public List<MakeCardControl> getNoInStockCardList(PCPSWebInput webInput,
			String batchNo, String status);

	/**
	 * 测试插入制卡申请
	 * @param key
	 * @return
	 */
	public Integer insertMakeCardControl(String key);

	/**
	 * XXX制卡单统计表
	 * @param webInput
	 * @param issueBranchNo
	 * @param isSingle
	 * @param startTime
	 * @param endTime
	 * @param status
	 * @return
	 */
	public List<Object[]> getReportMakeCardControlByCondition(
			PCPSWebInput webInput, String issueBranchNo, boolean isSingle,
			String startTime, String endTime, String status);
}
